package com.myapp.struts.personal;

import com.myapp.struts.personal.RegistroForm;
import hibernate.Clientes;
import java.util.Random;
import hibernate.ClientesDAO;
import hibernate.Cuentas;
import hibernate.CuentasDAO;
import hibernate.CuentasHasClienteDAO;
import hibernate.Sucursales;
import hibernate.SucursalesDAO;
import hibernate.Usuarios;
import hibernate.UsuariosDAO;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import util.Mail;

public class RegistroAction extends org.apache.struts.action.Action {

    private static final String SUCCESS = "success";
    private static final String FORMULARIO = "formulario";

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {


        if (request.getParameter("alta") != null) {

            String password = "";
            String perfil = "cliente";

            for (int k = 0; k < 4; k++) {
                Random rand = new Random();
                password = password + String.valueOf(rand.nextInt(10));
            }

            RegistroForm f = (RegistroForm) form;

            // creamos un usuario requerido en cliente
            UsuariosDAO usuarioDAO = new UsuariosDAO();
            Usuarios nuevoUsuario = usuarioDAO.create(f.getIdentidad(), password, perfil);

            //buscamos la sucursal con la pkSucursal que nos viene del formulario 
            SucursalesDAO sucursalDAO = new SucursalesDAO();
            Sucursales sucursal = sucursalDAO.get(Integer.valueOf(f.getPkSucursal()));

            //creamos una cuenta requerida en cliente
            Cuentas cuenta = new Cuentas(2100, sucursal.getPkSucursal(), 10, 0, f.getTipoCuenta());

            // creamos un cliente sin las relaciones
            Clientes cliente = new Clientes(nuevoUsuario, f.getNombre(), f.getApellido_1(), f.getApellido_2(), f.getIdentidad(), f.getDireccion(), f.getLocalidad(), f.getProvincia(), f.getCp(), f.getTelefono(), f.getPais(), f.getEmail());
            cliente.setSucursales(sucursal);

            cliente.getCuentasHasClienteses().add(cuenta.getPkCuenta());
            cuenta.getCuentasHasClienteses().add(cliente.getPkCliente());


            //guardamos cliente y cuenta
            ClientesDAO c = new ClientesDAO();
            c.create(cliente);
            CuentasDAO cu = new CuentasDAO();
            cu.create(cuenta);

            // guardamos su relacion
            CuentasHasClienteDAO dao = new CuentasHasClienteDAO();
            dao.create(cliente, cuenta, "titular");

            //Mail.enviarMail(cliente.getEmail(), "Bienvenido a UPO Bank", "Gracias por darse de alta en nuestro banco.\nSu usuario es " + cliente.getIdent() + " y su clave de acceso es " + password + ".");

            request.setAttribute("cliente", c.get(f.getIdentidad()));
            return mapping.findForward(SUCCESS);


        }

        SucursalesDAO daoSucursal = new SucursalesDAO();
        List<Sucursales> listaSucursales = daoSucursal.getList();
        request.setAttribute("listaSucursales", listaSucursales);
        return mapping.findForward(FORMULARIO);




    }
}
